package edu.gdkm.tactics.parent;

import edu.gdkm.tactics.behavior.FlyBehavior;
import edu.gdkm.tactics.behavior.QuackBehavior;

/**
 * 鸭子父类
 */
public abstract class AbstractDuck {

    public FlyBehavior flyBehavior;
    public QuackBehavior quackBehavior;

    /**
     * 鸭子描述
     */
    public abstract void display();

    /**
     * 飞行方式
     */
    public void performFly(){
        flyBehavior.fly();
    }

    /**
     * 叫声方式
     */
    public void performQuack(){
        quackBehavior.quack();
    }

    /**
     * 提供set方法更改飞行方式
     * @param flyBehavior
     */
    public void setFlyBehavior(FlyBehavior flyBehavior) {
        this.flyBehavior = flyBehavior;
    }

    /**
     * 提供set方法更改叫声方式
     * @param quackBehavior
     */
    public void setQuackBehavior(QuackBehavior quackBehavior) {
        this.quackBehavior = quackBehavior;
    }

    public void swim(){
        System.out.println("All ducks float, even decoys!");
    }

}
